package cn.humaohua.study.yanmo_design_pattern.ch10.vb;

import java.util.ArrayList;
import java.util.Collection;

public class DepUserMediatorImpl {
    private static DepUserMediatorImpl mediator = new DepUserMediatorImpl();

    Collection<DepUserModel> depUserCol = null;

    private DepUserMediatorImpl() {
        initTestData();
    }

    public static DepUserMediatorImpl getInstance() {
        return mediator;
    }

    /**
     * 初始化测试数据
     */
    private void initTestData() {
        depUserCol = new ArrayList<DepUserModel>();

        // 准备一些测试数据
        DepUserModel du1 = new DepUserModel();
        du1.setDepUserId("du1");
        du1.setDepId("d1");
        du1.setUserId("u1");
        depUserCol.add(du1);

        DepUserModel du2 = new DepUserModel();
        du2.setDepUserId("du2");
        du2.setDepId("d1");
        du2.setUserId("u2");
        depUserCol.add(du2);

        DepUserModel du3 = new DepUserModel();
        du3.setDepUserId("du3");
        du3.setDepId("d2");
        du3.setUserId("u3");
        depUserCol.add(du3);

        DepUserModel du4 = new DepUserModel();
        du4.setDepUserId("du4");
        du4.setDepId("d2");
        du4.setUserId("u4");
        depUserCol.add(du4);

        DepUserModel du5 = new DepUserModel();
        du5.setDepUserId("du5");
        du5.setDepId("d2");
        du5.setUserId("u1");
        depUserCol.add(du5);

    }

    /**
     * 完成因撤销部门的操作所引起的与人员的交互，需要去除相应的关系
     *
     * @param depId
     * @return
     */
    public boolean deleteDep(String depId) {
        // 请注意：为了演示简单，部门撤销后，
        // 原部门人员怎么处理等后续业务处理，这里就不管了
        Collection<DepUserModel> tmpCol = new ArrayList<DepUserModel>();
        for (DepUserModel du : depUserCol) {
            if (du.getDepId().equals(depId)) {
                tmpCol.add(du);
            }
        }
        depUserCol.removeAll(tmpCol);
        return true;
    }

    public boolean deleteUser(String userId) {
        Collection<DepUserModel> tmpCol = new ArrayList<DepUserModel>();
        for (DepUserModel du : depUserCol) {
            if (du.getUserId().equals(userId)) {
                tmpCol.add(du);
            }
        }
        depUserCol.removeAll(tmpCol);
        return true;
    }

    public void showDepUsers(Dep dep) {
        for (DepUserModel du : depUserCol) {
            if (du.getDepId().equals(dep.getId())) {
                System.out.println("部门编号：" + du.getDepId() + " 下面拥有人员，其编号为："
                        + du.getUserId());
            }
        }
    }

    public void showUserDeps(User user) {
        for (DepUserModel du : depUserCol) {
            if (du.getUserId().equals(user.getId())) {
                System.out.println("人员编号：" + du.getUserId() + " 其所属部门编号为："
                        + du.getDepId());
            }
        }
    }

    /**
     * 完成因人员调换部门引起的与部门交互
     *
     * @param userId
     * @param oldDeptId
     * @param newDeptId
     * @return
     */
    public boolean changeDep(String userId, String oldDeptId, String newDeptId) {
        for (DepUserModel du : depUserCol) {
            if (du.getUserId().equals(userId)
                    && du.getDepId().equals(oldDeptId))
                du.setDepId(newDeptId);
        }
        return true;
    }

    /**
     * 完成因部门合并操作所引起的与人员的交互
     *
     * @param oldDepIds
     * @param newDep
     * @return
     */
    public boolean joinDep(Collection<String> oldDepIds, Dep newDep) {
        for (DepUserModel du : depUserCol) {
            if (oldDepIds.contains(du.getDepId())) {
                du.setDepId(newDep.getId());
            }
        }
        return true;
    }
}
